数据结构C语言---模式串next数组和nextval数组的生成

一、next数组(简单易懂)

next函数值仅取决于模式串本身,与主串无关

next数组的生成这里有两种方式:
1.前缀后缀匹配
2.字符串下标匹配
以一个数组为例:
a b a b a a a b a b a a 
我们要生成这个模式串的next数组,那么首先第一件事就是为这些字符标号,
如下;

  序号j: 1 2 3 4 5 6 7 8 9 10 11 12
模式串s: a b a b a a a b a b  a  a

方法一 前缀后缀匹配

  1. 前缀和后缀进行比较,如果前缀和后缀没有相同前缀,则为0+1,如果相同,则相同的字符个数+1;
  2. 前缀取s[n]之前字符的n-2位,后缀取s[n]之前n-1字符后面的后n-2位。
  序号j: 1 2 3 4 5 6 7 8 9 10 11 12
模式串s: a b a b a a a b a b  a  a
 next[]: 0 1
 1.next[1],next[2]无论是什么模式串数组,永远都是0和1。
 
 2.next[3]:如上,序号j[3]对应的模式串s[3],那么我们就看模式串s[3]前面的
 字符即可,即为a b,那么s[3]的前缀为a,后缀为b,a和b不相同,则next[3]为0+1=1;
 
 3.next[4]:序号j[4]对应的s[4],找s[4]的前面字符,为a b a,字符前缀为a、ab;
 后缀为ba, a;有1个相同字符,则next[4]=1+1=2;

 4.next[5]:序号j[5]对应的s[5],找
  • 16
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值